package cn.biplam.front.component.view.tree;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;
import cn.biplam.front.component.AjxResponse;
import cn.biplam.front.html.base.HtmlWindow;

/**
 * 树显示抽象类
 *   设置树的显示参数
 *   返回树的HtmlWindow
 * @author WangSong 2009-10-12下午02:15:56
 * @version 1.0
 */
public abstract class TreeView extends AjxResponse {
	
	/** 树模版类对象*/
	protected TreeBase treeBase;
	
	/**
	 * 构造函数
	 * @param aId 树VC的actionId，树展开
	 */
	public TreeView(String aId) {
		treeBase = new TreeBase(aId);
	}
	
	/**
	 * 构造函数
	 * @param treeBase 需要扩展TreeBase时,继承TreeBase,覆写其需要扩展的方法
	 */
	public TreeView(TreeBase treeBase) {
		this.treeBase = treeBase;
	}

	/**
	 * 设置树
	 *  <li>设置树的DC<br>
	 *  使用方法<br>
	 *  treeBase.putTreeDc(int treeIndex,TreeDC treeDc,TreeCallBackNew callback)
	 *  <li>设置树的右键菜单<br>
	 *  使用方法<br>
	 *  treeBase.putRightMenuItem(int treeIndex, Tree_NodeType_Commen nodeType,String actionId,String text)
	 *  <li>设置根主题图片、子主题图片、叶子图片、自定义图片<br>
	 *  使用方法<br>
	 *  <dd>调用treeBase.setPic(int treeIndex,Tree_PicType picType);
	 *  <dd>或调用setPic(int treeIndex,TreeCallBackImg callBackPic)来设置图片
	 *  <dd>调用TreeCallBackImg.getInstace(Tree_PicType picType)来获得图片callback实例
	 * @param treeBase 树模版对象
	 * @throws ErrorMessage
	 */
	protected abstract void setTree(TreeBase treeBase,UserInfo mUser)  throws ErrorMessage ;
	
	/**
	 * 页面直接调用接口(用于非Ajx请求时,获取页面对象)
	 * 第一次生成业务模型树时调用
	 * @param mUser 		用户信息
	 * @param sHomeUrl 		系统路径
	 * @param cId 			上级页面ID,用于唯一确定树内页面对象的ID(此参数为4位,否则做截位补齐处理)
	 * @return HtmlWindow 显示树的HtmlWindow
	 * @throws ErrorMessage
	 */
	public HtmlWindow get(UserInfo mUser, 
			              String sHomeUrl,
			              String pcId) throws ErrorMessage {
		this.mUser=mUser;
		this.sHomeUrl=sHomeUrl;
		setTree(treeBase,mUser);
		return treeBase.get(mUser, sHomeUrl, pcId);
	}
	
	/**
	 * 用于Ajx请求时,获取树的页面对象
	 * @param mUser 用户信息
	 * @param sHomeUrl 系统路径
	 * @param params ajx传来的参数集合
	 * @return HtmlWindow 显示树的HtmlWindow
	 * @throws ErrorMessage
	 */
	@Override
	protected HtmlWindow ajxGet() throws ErrorMessage{
		setTree(treeBase,mUser);
		return treeBase.ajxGet(mUser, sHomeUrl, params);
	}
}
